import numpy as np
%matplotlib notebook
import matplotlib.pyplot as plt
import ipywidgets as widgets
from maux import *
hide_interactive_toolbars()
# interaktívny editor pre vyšetrovanie priebehu elementárnych funkcií
from jedit import editor
np.warnings.filterwarnings('ignore', category=np.VisibleDeprecationWarning)
# nastavenie jazyka
from locale import setlocale, LC_ALL
from platform import uname
if uname()[0] == 'Linux':
setlocale(LC_ALL, 'sk_SK.utf8')
else:
setlocale(LC_ALL, 'sk_SK')
plt.rcParams["axes.formatter.use_locale"] = True
Lineárna lomená funkcia je určená rovnicou $$y = \frac{ax+b}{cx+d},$$ kde $a, b, c, d$ sú reálne čísla také, že $c \ne 0$ a $ad-bc \ne 0$. Definičným oborom je množina pozostávajúca zo všetkých reálnych čísel rôznych od $-\frac{d}{c}$. Grafom je hyperbola.
Nakreslenie grafu lineárne lomenej funkcie danej rovnicou $$y = \frac{12-9x}{12x-8}.$$ Definičným oborom je množina pozostávajúca zo všetkých reálnych čísel rôznych od $\frac{2}{3}$.
#####
##### nakreslenie grafu funkcie
#####
#### vstupné údaje
def f(X): return (12 - 9 * X) / (12 * X - 8) # ufunc verzia funkcie
X = np.linspace(-4, 5, 9*20+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[X < 2/3], X[X > 2/3] # číslo 2/3 nepatrí do oboru definície
Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(6, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Graf funkcie $y = \dfrac{12-9x}{12x-8}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-5.5, 4.5) # ohraničenie hodnôt pre os y
ax.set_xticks(range(-4, 5+1)) # kótovanie x-ovej osi
ax.set_yticks(range(-5, 4+1)) # kótovanie y-ovej osi
## graf funkcie
color = ax.plot([], [])[0].get_color()
ax.plot(X1, Y1, X2, Y2, c=color)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
Vyšetrenie priebehu lineárne lomenej funkcie danej rovnicou $$y = \frac{12-9x}{12x-8}.$$ Tu nás zaujímajú tieto informácie:
Ako vypočítať asymptoty grafu funkcie? Všimnime si najprv, že platí $$ \frac{12-9x}{12x-8} = \frac{3}{4}\frac{4-3x}{3x-2} = \frac{3}{4}\frac{2+2-3x}{3x-2} = \frac{3}{4}\frac{2}{3x-2} + \frac{3}{4} (-1) = \frac{1}{2}\frac{1}{x-\frac{2}{3}} - \frac{3}{4} . $$ Vrcholový tvar rovnice má tak tvar $$y = \frac{1}{2}\frac{1}{x-\frac{2}{3}} - \frac{3}{4}.$$
Odtiaľ dostaneme, že $$ \lim_{x \to \frac{2}{3}-} \frac{12-9x}{12x-8} = \lim_{x \to \frac{2}{3}-} \left(\frac{1}{2}\frac{1}{x-\frac{2}{3}} - \frac{3}{4}\right) = -\infty \\ \lim_{x \to \frac{2}{3}+} \frac{12-9x}{12x-8} = \lim_{x \to \frac{2}{3}+} \left(\frac{1}{2}\frac{1}{x-\frac{2}{3}} - \frac{3}{4}\right) = +\infty . $$ Asymptotou bez smernice grafu funkcie je tak priamka rovnobežná s osou $y$ prechádzajúca bodom $\frac{2}{3}$ na $x$-ovej osi.
Treba ešte nájsť asymptoty so smernicou grafu funkcie v bodoch $\pm\infty$. Platí: $$ \lim_{x \to +\infty} \frac{\frac{12-9x}{12x-8}}{x} = \lim_{x \to +\infty} \frac{1}{x}\frac{\frac{12}{x}-9}{12-\frac{8}{x}} = \lim_{x \to +\infty} \frac{1}{x} \times \lim_{x \to +\infty}\frac{\frac{12}{x}-9}{12-\frac{8}{x}} = 0 \times \left(-\frac{3}{4}\right) = 0 \\ \lim_{x \to +\infty} \left(\frac{12-9x}{12x-8} - 0x\right) = \lim_{x \to +\infty} \left(\frac{1}{2}\frac{1}{x-\frac{2}{3}} - \frac{3}{4}\right) = \lim_{x \to +\infty} \frac{1}{2}\frac{1}{x-\frac{2}{3}} - \lim_{x \to +\infty} \frac{3}{4} = 0 - \frac{3}{4} = -\frac{3}{4} . $$ Odtiaľ: $$ \lim_{x \to +\infty} \left(\frac{12-9x}{12x-8} - \left(0x-\frac{3}{4}\right)\right) = 0 $$ Asymptotou so smernicou v bode $+\infty$ je tak priamka $4y+3 = 0$. Podobne zistíme, že tá istá priamka je asymptotou so smernicou v bode $-\infty$.
#####
##### vyšetrenie priebehu funkcie
#####
#### vstupné údaje
def f(X): return (12 - 9 * X) / (12 * X - 8) # ufunc verzia funkcie
X = np.linspace(-4, 5, 9*20+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[X < 2/3], X[X > 2/3] # číslo 2/3 nepatrí do oboru definície
Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(9, 6) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_title(r"Priebeh funkcie $y = \dfrac{12-9x}{12x-8}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
ax.grid() # pravoúhla sieť
ax.set_ylim(-5.5, 4.5) # ohraničenie hodnôt pre os y
ax.set_xticks(range(-4, 5+1)) # kótovanie x-ovej osi
ax.set_yticks(range(-5, 4+1)) # kótovanie y-ovej osi
## graf funkcie
color = ax.plot([], [])[0].get_color()
ax.plot(X1, Y1, X2, Y2, c=color)
## nulové body
ax.plot(4/3, 0, 'kx', label=r"nulový bod $\frac{4}{3}$")
## asymptota bez smernice
Ay = np.linspace(-5.5, 4.5, 10*10+1)
Ax = np.ones(len(Ay)) * 2/3
ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota bez smernice v bode $\frac{2}{3}$")
## asymptota so smernicou
Ax = X
Ay = np.ones(len(Ax)) * (-3/4)
ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $4y+3 = 0$ v bode $\mp\infty$")
## legenda
# ax.legend()
ax.legend(loc=(0.60, 0.20))
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
fig.show()
V nasledujúcich príkladoch budeme kresliť grafy a vyšetrovať priebeh lineárne lomených funkcií. Pretože tieto funkcie majú neohraničený definičný obor, budeme pri zostrojovaní grafu každej takejto funkcie vykreslovať len jej zaujímavú časť. Pri vyšetrovani priebehu týchto funkcií treba určiť:
Súradnice význačných bodov, ktoré sú zrejmé z grafu, netreba explicitne uvádzať.
Doporučujeme tiež rozdeliť riešenie do dvoch častí:
#####
##### šablóna riešenia (nakreslenie grafu a vyšetrenie priebehu funkcie)
#####
#### vstupné údaje
# def f(X): return None # ufunc verzia funkcie
# X = np.linspace(None, None, None+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
# X1, X2 = X[X < None], X[X > None] # číslo None nepatrí do oboru definície
# Y1, Y2 = f(X1), f(X2) # odpovedajúce hodnoty závislej premennej
#### obrázok s jedným diagramom
# fig, ax = plt.subplots()
# fig.set_size_inches(6, 4) # veľkosť obrázka (východzia hodnota je 6x4)
### diagram
# init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
# ax.set_title(r"Graf/Priebeh funkcie $y = \dfrac{?x+?}{?x+?}$", fontdict={'verticalalignment': 'bottom'}) # pomenovanie diagramu
# ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
# ax.set_xlim(None, None) # ohraničenie hodnôt pre os x
# ax.set_ylim(None, None) # ohraničenie hodnôt pre os y
# ax.set_xticks(range(None, None+1)) # kótovanie x-ovej osi
# ax.set_yticks(range(None, None+1)) # kótovanie y-ovej osi
## graf funkcie
# color = ax.plot([], [])[0].get_color()
# ax.plot(X1, Y1, X2, Y2, c=color)
## nulové body funkcie
# ax.plot(None, 0, 'kx', label=r"nulový bod $?$")
## asymptota bez smernice
# Ay = np.linspace(None, None, None+1)
# Ax = np.ones(len(Ay)) * None
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota bez smernice v bode $?$")
## asymptota so smernicou
# Ax = X
# Ay = np.ones(len(Ax)) * None
# ax.plot(Ax, Ay, '--', lw=1, label=r"asymptota so smernicou $?x+?y+? = 0$ v bode $\mp\infty$")
## legenda
# ax.legend()
# ax.legend(loc='center') # umiestenie v strede diagramu
# ax.legend(loc=(None, None)) # ľavý dolný roh legendy má súradnice (None, None)
### archivácia obrázka
# fig.savefig("<meno súboru>.png")
### samotné zobrazenie
# fig.show()
Nakreslite grafy a vyšetrite priebeh týchto funkcií $$y = \frac{1+x}{1-x}.$$ $$y = \frac{3x-1}{x-1}.$$ $$y = \frac{3x+5}{x+2}.$$ $$y = \frac{5+4x}{x+1}.$$ $$y = \frac{7-2x}{2x+3}$$ $$y = \frac{2+3x}{1-4x}.$$
Nakreslite graf a vyšetrite priebeh funkcie $$y = \frac{4x-3}{3x+2}.$$
Zostrojte inverznú funkciu k funkcii $$y = \frac{4x+3}{3x-2}.$$ Overte graficky, že riešenie je správne.
###
### šablóna riešenia
###
## zadanie
fig, ax = plt.subplots()
fig.set_size_inches(9, 9)
init_subplot(ax)
ax.set_title(r"Inverzná funkcia")
ax.set_aspect('equal')
# ax.grid()
ax.set_ylim(-6.5, 6.5)
ax.set_xticks(range(-6, 6+1))
ax.set_yticks(range(-6, 6+1))
def f(X): return (4 * X + 3) / (3 * X - 2)
X = np.linspace(-6.5, 6.5, 13*100+1) # výber hodnôt nezávislej premennej pre zaujímavú časť grafu
X1, X2 = X[X < 2/3], X[X > 2/3] # číslo 2/3 nepatrí do oboru definície
color = ax.plot([], [], label=r"funkcia $y = \dfrac{4x+3}{3x-2}$")[0].get_color()
ax.plot(X1, f(X1), X2, f(X2), c=color) # graf funkcie
ax.plot(X, X, 'k--', lw=1, label=r"os súmernosti")
## riešenie
# def g(X): return None # ufunc verzia inverznej funkcie
# X3, X4 = X[X < None], X[X > None] # číslo None nepatrí do oboru definície
# color = ax.plot([], [], label=r"inverzná funkcia $y = \dfrac{?x+?}{?x+?}$")[0].get_color()
# ax.plot(X3, g(X3), X4, g(X4), c=color) # graf inverznej funkcie
## dokončenie
ax.legend()
# fig.savefig("<meno súboru>.png")
fig.show()
V nasledujúcich príkladoch si aktívne precvičíme niektoré elementárne transformácie grafov funkcií.
Vykreslenie deje pomocou interaktívnych prvkov knižnice ipywidgets
.
Nakreslenie grafu lineárne lomenej funkcie danej rovnicou $$y = \frac{ax+b}{cx+d}$$ pre vybrané hodnoty parametrov $a, b, c \ne 0, d$. Prípad $ad-bc = 0$ nevylučujeme.
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####
#### vstupné údaje
N = 8 # na oboch osiach sa zobrazí interval hodnôt 〈-N, N〉
def f(X, a, b, c, d): return (a * X + b) / (c * X + d)
X = np.linspace(-N, N, 2*N*30+1)
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 9)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-N, N) # ohraničenie hodnôt pre os y
# ax.set_xticks(range(-N, N+1)) # kótovanie x-ovej osi
# ax.set_yticks(range(-N, N+1)) # kótovanie y-ovej osi
## graf funkcie
def plot_graph(a, b, c, d):
n = -d / c
X1, X2 = X[X < n], X[X > n] # číslo n nepatrí do oboru definície
ax.set_title(r"Graf funkcie $y = \dfrac{{{0}x+{1}}}{{{2}x+{3}}}$".format(a, b, c, d), fontdict={'verticalalignment': 'bottom'})
if ax.lines:
ax.lines[1].set_xdata(X1)
ax.lines[1].set_ydata(f(X1, a, b, c, d))
ax.lines[2].set_xdata(X2)
ax.lines[2].set_ydata(f(X2, a, b, c, d))
else:
color = ax.plot([], [])[0].get_color()
ax.plot(X1, f(X1, 0, 1, 1, 0), c=color)
ax.plot(X2, f(X2, 0, 1, 1, 0), c=color)
widgets.interact(plot_graph,
a=widgets.IntSlider(min=-N//2, max=N//2, value=0),
b=widgets.IntSlider(min=-N//2, max=N//2, value=1),
c=widgets.SelectionSlider(options=[k for k in range(-N//2, N//2+1) if k != 0], value=1),
d=widgets.IntSlider(min=-N//2, max=N//2, value=0),
)
### samotné zobrazenie
fig.show()
interactive(children=(IntSlider(value=0, description='a', max=4, min=-4), IntSlider(value=1, description='b', …
Nakreslenie grafu lineárne lomenej funkcie danej rovnicou vo vrcholovom tvare $$y = \frac{k}{x-m}+n$$ pre vybrané hodnoty parametrov $k \ne 0$, $m$ a $n$.
#####
##### grafy parametrického systému funkcií (interaktívna verzia)
#####
#### vstupné údaje
N = 8 # na oboch osiach sa zobrazí interval hodnôt 〈-N, N〉
def f(X, k, m, n): return k / (X - m) + n
X = np.linspace(-N, N, 2*N*30+1)
Ay1 = X # asymptota bez smernice
Ax2 = X # asymptota so smernicou
#### obrázok s jedným diagramom
fig, ax = plt.subplots()
fig.set_size_inches(8, 9)
### diagram
init_subplot(ax) # inicializácia diagramu: vytvorí sa pravoúhla súradnicová sústava
ax.set_aspect('equal') # nastavenie rovnakej mierky pre obe osi
# ax.grid() # pravoúhla sieť
ax.set_ylim(-N, N) # ohraničenie hodnôt pre osu y
# ax.set_xticks(range(-N, N+1)) # kótovanie x-ovej osi
# ax.set_yticks(range(-N, N+1)) # kótovanie y-ovej osi
## graf funkcie
def plot_graph(k, m, n):
X1, X2 = X[X < m], X[X > m] # číslo m nepatrí do oboru definície
ax.set_title(r"Graf funkcie $y = \dfrac{{{0}}}{{x-{1}}}+{2}$".format(k, m, n), fontdict={'verticalalignment': 'bottom'})
Ax1 = m * np.ones(len(Ay1)) # asymptota bez smernice v bode m
Ay2 = n * np.ones(len(Ax2)) # asymptota so smernicou v bode ±∞
if ax.lines:
ax.lines[1].set_xdata(X1)
ax.lines[1].set_ydata(f(X1, k, m, n))
ax.lines[2].set_xdata(X2)
ax.lines[2].set_ydata(f(X2, k, m, n))
ax.lines[3].set_xdata(Ax1)
ax.lines[4].set_ydata(Ay2)
else:
color = ax.plot([], [])[0].get_color()
ax.plot(X1, f(X1, 1, 0, 0), c=color)
ax.plot(X2, f(X2, 1, 0, 0), c=color)
ax.plot(Ax1, Ay1, '--', lw=1)
ax.plot(Ax2, Ay2, '--', lw=1)
widgets.interact(plot_graph,
k=widgets.SelectionSlider(options=[k for k in range(-N//2, N//2+1) if k != 0], value=1),
m=widgets.IntSlider(min=-N//2, max=N//2, value=0),
n=widgets.IntSlider(min=-N//2, max=N//2, value=0),
)
### samotné zobrazenie
fig.show()
interactive(children=(SelectionSlider(description='k', index=4, options=(-4, -3, -2, -1, 1, 2, 3, 4), value=1)…